package com.springcloud.serviceribbon.impl;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * @author chenkuan
 * @version v1.0
 * @desc 测试类HelloService
 * @date 2019/4/25 025 13:38
 */
@Service
public class HelloServiceImpl {

	@Autowired
	private RestTemplate restTemplate;

	/**
	 * Hystrix Dashboard断路器图形界面
	 * 访问地址 http://localhost:8764/hystrix
	 * 界面中依次输入：
	 * http://localhost:8764/actuator/hystrix.stream
	 * 2000
	 * hi
	 */

	/**
	 * 通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口，
	 * 在这里我们直接用的程序名替代了具体的url地址，
	 * 在ribbon中它会根据服务名来选择具体的服务实例，
	 * 根据服务实例在请求的时候会用具体的url替换掉服务名
	 *
	 * @HystrixCommand(fallbackMethod = "hiError") 短路器
	 * 当service-hi工程服务不可用时，会自动调用fallbackMethod = "hiError"方法，而不是等待相应
	 */
	@HystrixCommand(fallbackMethod = "hiError")
	public String hiService(String name) {
		//该方法走eureka注册中心调用(这种方式必须先开启负载均衡@LoadBalanced)
		return restTemplate.getForObject("http://service-hi/hi?name=" + name, String.class);
	}

	public String hiError(String name) {
		return "hi," + name + ", sorry! this is a error";
	}

}
